gusucode.com > 先进 PID 控制及其 MATLAB 仿真 (程序) > 先进 PID 控制及其 MATLAB 仿真 (程序)\CHAPTER4\chap4_7f2.m

    %chap4_7f2.m
function [u]=chap4_7f2(u1,u2,u3,u4)
global s
persistent w x1 x2 x3 w_1 w_2 w_3 

N=300;
C=5;

if u3==0
   w=zeros(N+C,1);
   w_1=w;
   w_2=w;
   d_w=w;
end
  
alfa=0.04;

if s==1       %Step Signal
   Smin=0;
   Smax=1;
elseif s==2   %Sine Signal
   Smin=-0.5;
   Smax=0.5;  
elseif s==3   %Square Wave Signal
   Smin=-0.5;
   Smax=0.5;
end

xite=0.1; 

dvi=(Smax-Smin)/(N-1);

for i=1:1:C                %C size
    v(i)=Smin;
end
for i=C+1:1:C+N            %N size
    v(i)=v(i-1)+dvi;
end
for i=N+C+1:1:N+2*C        %C size
    v(i)=Smax;
end

rin=u1;
for i=1:1:N+C
if rin>=v(i)&rin<=v(i+C)
   a(i)=1;
else
   a(i)=0;
end
end

errork=u2;

un=a*w_1;
up=u4;
u=up+un;                %Total control output

if u>=10
   u=10;
end
if u<=-10
   u=-10;
end   
if s==1|s==3
   d_w=a'*xite*up/C;       
elseif s==2
   d_w=xite*up/C;       %For Sine Signal
end

w=w_1+d_w+alfa*(w_1-w_2);
w_3=w_2;
w_2=w_1;
w_1=w;